身為後端,資料庫也是必備技能之一,
今天來說說,如何用 Docker 在 Server 上啟動 MySQL 的服務。
MySQL 幾乎是最常見的關聯式資料庫,在業界上也很廣泛使用,
跟 Node.Js 一樣,Docker Hub 上也有提供了官方的 Docker Image。
如果是直接在 Server 上安裝 MySQL,很容易出現的一個問題,是如果要把多個專案都跑在同一台 Server 時,不同專案間使用的 MySQL 版本可能不一樣,就會只能使用同一個版本來用,這一點在其他需要的執行環境上也會出現,像是 Node.Js 的版本,
而使用 Docker 啟動 MySQL,只要把使用的 Port 分開,就可以執行不同的版本了。
閱讀過 mysql docker image 的描述後,我們需要加入以下的參數:
--publish
(-p
)--env
(-e
)--volume
(-v
)--detach
(-d
)透過以下的指令,就能啟動 MySQL 了,
另外,在第一次剛啟動後,會有大約幾秒還無法使用,因為此時正在初始化資料庫的內容,稍等一下就可以了。
$ sudo docker run \
--publish 3306:3306 \
--env MYSQL_ROOT_PASSWORD=your-root-password \
--env MYSQL_USER=default-user \
--env MYSQL_PASSWORD=my-pw \
--env MYSQL_DATABASE=not_so_hard \
--volume /root/mysql:/var/lib/mysql \
--name mysql \
--detach \
mysql:8
在文章 D8 - Docker 玩具 — 團隊觀戰區爬蟲 中,我們使用到了 Docker Compose,
Docker Compose 可以大量簡化指令的內容,因此我們這次也加入定義檔:
services:
mysql:
image: mysql:8
restart: unless-stopped
ports:
- "3306:3306"
env_file:
- .env
volumes:
- /root/mysql:/var/lib/mysql
其中,我們把需要的環境變數,放到了 .env
裡面,
可以參考 .env.example
:
MYSQL_ROOT_PASSWORD=your-root-password
MYSQL_USER=default-user
MYSQL_PASSWORD=my-pw
MYSQL_DATABASE=not_so_hard
執行 Compose 的指令,就同樣也能啟動 MySQL。
$ sudo docker compose up -d
以上的範例可以在 這裡 找到。
下次,在新專案開始建置時,或許你也可以考慮使用 Docker 來建置資料庫。